前篇介紹 Slash Commands 而不是 Commands ,
是因為在實作時無法執行成功,
所以本來想直接用
@client.event 的on_message 直接做掉就好,
但是在這個假日整理與實作時,
發現了問題點後,
決定補發。
以下直接上路!!
於文字頻道直接打命令後,就可以互動的方式
在許多的範例檔案,
有人可能看過 command_prefix
範例:
client = commands.Bot(command_prefix='$', intents=intents)
意思是指定"$"為觸發命令的方式,
而在註冊命令時,自動 $[命令名稱]後及可觸發功能,
所以您可以自己隨意選擇想要的前綴。
首先 註冊前綴 像上面的範例一樣,
官方是建議不要使用""空字符來當前綴,
可能會有用,但需要避免。
而後,註冊命令有兩種方式:
詳細在pycord文檔有,
下面我就直接引入了。
from discord.ext import commands
bot = commands.Bot(command_prefix='$')
@bot.command()
async def test(ctx):
pass
@client.event
async def on_message(message):
if message.author == client.user: # 排除機器人本身的訊息
return
await client.process_commands(message) # 需要加這個 文檔未填寫
from discord.ext import commands
bot = commands.Bot(command_prefix='$')
@commands.command()
async def test(ctx):
pass
bot.add_command(test)
import os
import discord
from discord.ext import commands
from dotenv import load_dotenv
# 取得環境設定
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
# intents
intents = discord.Intents.default()
intents.message_content = True
# client
client = commands.Bot(command_prefix='$', intents=intents)
@client.event
async def on_message(message):
if message.author == client.user: # 排除機器人本身的訊息
return
await client.process_commands(message)
@client.command()
async def hello(ctx, message: str=""):
await ctx.send(f"您好w {'您說了' + message if message else ''}")
@commands.command()
async def test(ctx):
await ctx.send('test')
client.add_command(test)
client.run(DISCORD_TOKEN)
原本在dicord.py 版本或是很多人的實例當中,
雖然直接@client.command() 卻完全沒有註冊成功,
但也沒有錯誤訊息,
而以為它已經不能運作了,
結果是需要 process_commands
這個功能是方便 你直接註冊命令,
而不需要直接在on_message之中一個一個判斷,
當然,你也可以暴力寫,
但明明有擴展套件為何不用呢?
p.s 而這個功能無法在伺服器設定>應用程式>整合 查看。